package com.thread.auxiliaryClassUse;

import java.util.concurrent.CountDownLatch;

/**
 * 单个线程等待：多个线程(任务)完成后，进行汇总合并。
 * 很多时候，我们的并发任务，存在前后依赖关系；比如数据详情页需要同时调用多个接口获取数据，并发请求获取到数据后、需要进行结果合并；
 * 或者多个数据操作完成后，需要数据check；这其实都是：在多个线程(任务)完成后，进行汇总合并的场景
 */
public class CountDownLatchTest03 {

    static CountDownLatch countDownLatch = new CountDownLatch(5);

    public static void main(String[] args) throws InterruptedException {

        for (int i = 0; i < 5; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    countDownLatch.countDown();
                    System.out.println(Thread.currentThread().getName()+": 线程完成任务");
                }
            }).start();
        }

        Thread.sleep(2000);
        countDownLatch.await();
        System.out.println("主线程:在所有任务运行完成后，进行结果汇总");
    }
}
